<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div class="container">
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </div>
</body>

<style>

    /* 
        从每行 N 项到每行 M 项(浏览器F12切换到手机窗口模式拉动缩放查看效果)
        ✔️ 只有一行代码
        ✔️页脚中的元素宽度一致
        ✔️ 完全控制每行的项目数
        ✔️ 项目会变大变小
        ✔️ 控制项目何时换行
    */    
    .container {
        --w: 400px;
        --n: 4;
        --m: 2;

        display: grid;
        grid-template-columns: repeat(
            auto-fit,
            minmax(

                /*  
                    当屏幕宽度大于400px我们属于第一条规则（每行N个项目）时，
                    当屏幕宽度小于400px时，我们属于第二条规则（每行M项目）。
                */
                clamp(
                    100%/ (var(--n) + 1) + 0.1%,
                    (var(--w) - 100vw) * 1000,
                    100%/ (var(--m) + 1) + 0.1%
                ),
                1fr
            )
        );
        /*this */
        gap: 10px;
    }

    .container>div {
        height: 100px;
        background: red;
    }
</style>

</html>